package com.test.base.netty.bytebuf;

import com.test.base.netty.MyUtils;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SliceByteBufWithRelease {
    /**
     * description 测试byteBuf分片后的release情况，
     * 此测试需要你知道什么时候release会使子分片的buf断开
     * @author zken
     * @CreateDate 2024/11/20 16:52:31
     */
    public static void main(String[] args) {
        ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(10);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            // 需要进行强制转换，不然会发生错误
            sb.append((char) ('a' + i));
        }
        buf.writeBytes(sb.toString().getBytes());
        MyUtils.log(buf);
        ByteBuf f1 = buf.slice(0, 5);
        f1.retain();// 告诉buf，这段内存需早释放时刻要保留
        MyUtils.log(f1);
        ByteBuf f2 = buf.slice(5, 5);
        MyUtils.log(f2);
        buf.release();
        // 进行release后不内存已经释放，
        MyUtils.log(f1);

    }
}
